/**
 * 
 */
package core;

import java.awt.event.MouseEvent;
import java.util.Map;

import contenedorSpring.Contenedor;
import rmi.ClienteRMI;
import skeleton.IGestionRemota;
import stub.IControlRemoto;
import utilidades.ViewerData;

/**
 * @author Elkin Torres
 *
 */
public class GestionRemota implements IGestionRemota {

	private CompartirPantalla p;
	private IControlRemoto getCliente(String ip)
	{
		ClienteRMI rmi =  (ClienteRMI) Contenedor.getSingleton().getApplicationContext().getBean("clienteRMI");
		IControlRemoto remoto = rmi.getServicio(ip);
		return remoto;
	}
	
	@Override
	public byte[] getPantalla(String ip) {
		return getCliente(ip).getPantalla();
	}

	@Override
	public void enviarEventoMouse(MouseEvent evento, ViewerData viewerData, String ip) {
		getCliente(ip).ejecutarEventoMouse(evento, viewerData);
	}

	@Override
	public void iniciarCompartirPantalla(String ip, Boolean estadoPantallaCompartida) {
		getCliente(ip).compartirPantalla(estadoPantallaCompartida);		
		if(estadoPantallaCompartida)
		{
			//enviar ip del la pantalla compartida, para que cuando se envie los eventos de mouse remoto, se sepa para quien es
			ClienteRMI rmi =  (ClienteRMI) Contenedor.getSingleton().getApplicationContext().getBean("clienteRMI");
			for (Map.Entry<String, IControlRemoto> elemento : rmi.getServicios().entrySet()) {
				if(elemento.getKey() != ip)
					elemento.getValue().enviarIPPantallaCompartida(ip);
			}
			p  = (CompartirPantalla) Contenedor.getSingleton().getApplicationContext().getBean("compartirPantalla");
			p.setEstado(estadoPantallaCompartida);
			p.setIControlRemoto(getCliente(ip));
			p.start();
		}
	}

	@Override
	public void detenerCompartirPantalla(String ip,	Boolean estadoPantallaCompartida) {
		p.setEstado(estadoPantallaCompartida);
		getCliente(ip).detenerCompartirPantalla(estadoPantallaCompartida);	
		//cerrar todas las pantallas de escritorio remoto
		ClienteRMI rmi =  (ClienteRMI) Contenedor.getSingleton().getApplicationContext().getBean("clienteRMI");
		for (Map.Entry<String, IControlRemoto> elemento : rmi.getServicios().entrySet()) {
		     elemento.getValue().cerrarPantallaCompartida();
		}
	}
}
